{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Accelerator / Deflector Demo\n",
    "\n",
    "In this notebook we will optimize a laser-driven electron deflecting structure.\n",
    "\n",
    "In this problem, we'll have an electron flowing in the y direction through the center of our domain.\n",
    "\n",
    "We have a laser source coming in from the left which we will use to deflect the electron in the out of plane direction.\n",
    "\n",
    "We'll optimize the regions around the electron trajectory to maximize this deflection, while leaving a central gap for the electron to flow through."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#\n",
    "#                ______  e-   ______\n",
    "#                ||||||   ^   ||||||        \n",
    "# driving laser  ||||||   |   ||||||        \n",
    "# -------------> ||||||   |   ||||||        \n",
    "#                ||||||   |   ||||||   \n",
    "#                ||||||   |   ||||||        \n",
    "#                ------       ------\n",
    "#                design       design\n",
    "#                region       region\n",
    "#"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pylab as plt\n",
    "import scipy.sparse as sp\n",
    "import sys\n",
    "sys.path.append('..')\n",
    "\n",
    "from angler import Optimization, Simulation\n",
    "from angler.structures import accelerator_multi\n",
    "\n",
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# fundamental constants and simulation parameters\n",
    "c0 = 3e8                     # speed of light in vacuum (m/s)\n",
    "lambda_m = 2e-6              # waveength in meters\n",
    "omega = 2*np.pi*c0/lambda_m  # angular frequency (2pi/s)\n",
    "dl = 0.1e-1                  # grid size (microns)\n",
    "NPML = [15, 0]               # number of pml grid points on x and y borders\n",
    "pol = 'Hz'                   # polarization (either 'Hz' or 'Ez')\n",
    "num_cells = 10                # number of cells to tile in plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# material constants\n",
    "n_index = np.sqrt(2)               # refractive index\n",
    "eps_m = n_index**2           # relative permittivity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# geometric parameters\n",
    "beta = 0.5                  # electron speed / speed of light\n",
    "gap = 0.4                   # gap size (microns)\n",
    "lambda0 = lambda_m*1e6      # free space wavelength (microns)\n",
    "L = 2                      # width of design region (microns)\n",
    "num_channels = 3        \n",
    "spc = 2                     # space between PML -> Src. & Src -> Design region"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.0, 2.4]\n",
      "Computed a domain with 2150 grids in x and 100 grids in y\n",
      "The simulation has 200 grids per free space wavelength\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# define permittivity of three port system\n",
    "eps_r, design_region = accelerator_multi(beta, gap, lambda0, L, spc, num_channels, dl, NPML, eps_m)\n",
    "(Nx, Ny) = eps_r.shape\n",
    "nx, ny = int(Nx/2), int(Ny/2)\n",
    "\n",
    "# make a new simulation\n",
    "simulation = Simulation(omega,eps_r,dl,NPML,pol)\n",
    "\n",
    "print(\"Computed a domain with {} grids in x and {} grids in y\".format(Nx,Ny))\n",
    "print(\"The simulation has {} grids per free space wavelength\".format(int(lambda0/dl)))\n",
    "\n",
    "simulation.plt_eps(tiled_y=num_cells)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# set the plane wave source\n",
    "simulation = Simulation(omega, eps_r, dl, NPML, 'Hz')\n",
    "simulation.src = np.zeros((Nx, Ny))\n",
    "# simulation.src[NPML[0] + int(spc/dl), :] = 1\n",
    "simulation.src[Nx-NPML[0] - int(spc/dl), :] = 1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.0, 2.4]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "E0 = 0.00015713009607210143\n"
     ]
    }
   ],
   "source": [
    "# make an empty space simulation for normalization of fields\n",
    "eps_normalize, _ = accelerator_multi(beta, gap, lambda0, L, spc, num_channels, dl, NPML, 1)\n",
    "sim_normalize = Simulation(omega,eps_normalize,dl,NPML,pol)\n",
    "sim_normalize.src = np.zeros((Nx, Ny))\n",
    "sim_normalize.src[NPML[0] + int(spc/dl), :] = 1\n",
    "sim_normalize.src[Nx-NPML[0] - int(spc/dl), :] = 1\n",
    "\n",
    "(_,Ey,Hz) = sim_normalize.solve_fields()\n",
    "sim_normalize.plt_re(tiled_y=num_cells, outline=False)\n",
    "plt.show()\n",
    "E0 = np.mean(np.abs(Ey[nx, :]))\n",
    "print('E0 = {}'.format(E0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbgAAAEoCAYAAAAqrOTwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAEYlJREFUeJzt3X+MZWV9x/H3Z5EWtSDqavwBdZWiVFpsBasUki7+qII0VqUqJRppBStGJdZUbQ0bownRVlN/RHFtV4JVROvvFtSWxmKjtt0hFLapaayEiBW3Cy34EwS+/ePeqcN2Z+bOzp27c77zfiU3O+ee+zz3uQnJh+/zPOecVBWSJHWz6UAPQJKktWDASZJaMuAkSS0ZcJKklgw4SVJLBpwkqSUDTpI0FUl2JNmdZNci57cmuTXJNePXBWs5nnutZeeSpA3lYuDdwCVLfOZLVXX6LAZjBSdJmoqqugq45UCPY54BJ0mapROT/EuSK5Icu5Zf5BSlJDWVZNr3YvxX4EcLjrdX1fYVtL8aeERVfS/JacCngKOnOcCFDDhJaizJ1Pqqqh9V1QmraH/bgr8vT/KeJJuras90RnhPBpwkNTblgFtV+yQPAb5TVZXkVxgtk908jbHtiwEnSY1NM+Am+K5Lga3A5iQ3AtuAgwGq6iLgDOBlSe4Efgi8oNbwkTbxcTmS1FOSOuigg6bW31133TW3minKWbOCk6SmkrBp0/Q2y991111T62sWDDhJamyWU5TrjQEnSY0ZcJKklgw4SVJLBpwkqZ0kBpwkqadp7qIcGgNOkhqzgpMktWTASZLacQ1OktSWASdJasmAkyS15C5KSVI7rsFJktoy4CRJLW3kgNu4k7OSpNas4CSpsY1cwRlwktSYASdJaieJlwlIknqygpMktWTASZJaMuAkSe14JxNJUlsGnCSpJXdRSpJasoKTJLXjGpwkqS0DTpLUkgEnSWrJTSaSpHZcg5MktbWRA27j1q6SpNas4CSpMdfgJEktbeQpSgNOkprygaeSpLas4CRJLRlwkqR2nKKUJLVlBSdJaskKTpLUkhWcJKkd1+AkSW1ZwUmSWtrIAbdxa1dJam5+inJarwm+b0eS3Ul2LfO5JyS5M8kZU/ux+2DASVJj88+Em8ZrAhcDz1hmPAcBbwG+sPpftzSnKCWpsVluMqmqq5JsWeZjrwA+DjxhrcdjwElSY1Neg9ucZOeC4+1VtX0FY3k48GzgFAw4SdI6sqeqTlhF+z8FXltVd89i88uKAm7z5s21ZcuWNRqKVmJubu6Afv/xxx+/z/fX67hg/Y5tvY5Lszc3N7enqh40rf5WsHY2KycAHxmPaTNwWpI7q+pTa/FlKwq4LVu2sHPnzuU/qDV3oP+jXey/g/U6Lli/Y1uv49LsJblh2n2upwu9q+qR838nuRj4q7UKN3CKUpJam+X/QCW5FNjKaK3uRmAbcDBAVV00s4GMGXCS1NSsb9VVVWeu4LMvXsOhAAacJLV2oKfADyQDTpIaM+AkSS2tp00ms2bASVJT6/AygZky4CSpMSs4SVJLVnCSpHZ8orckqS0rOElSSwacJKklA06S1I6XCUiS2trIAbdxt9dIklqzgpOkxjZyBWfASVJjBpwkqSUDTpLUjncykSS1ZQUnSWrJgJMktWTASZLa8U4mkqS2DDhJUksGnCSpJQNOktSSASdJasdNJpKktgw4SVJLGzngNu5NyiRpA5ifppzG6wCMfS7Jy5Pcf3/aG3CSpPXq+cDDgH9O8pEkT88KktaAk6TGhlzBVdXXq+qPgEcDHwZ2ADckeWOSByzX3jU4SWqqwy7KJMcBZwOnAR8HPgScDPwd8EtLtTXgJKmxIQdckjngf4A/B15XVbePT/1jkpOWa2/ASVJjQw444Leq6hsL30jyyKq6vqqes1xj1+AkqbEhr8EBfznhe/tkBSdJjQ2xgktyDHAscL8kCyu1w4BDJu3HgJOkpga8yeQxwOnA4cBvLHj/u8A5k3ZiwElSY0MMuKr6NPDpJCdW1Vf2tx8DTpIaG2LAJfmDqnor8NtJztz7fFW9cpJ+DDhJamyIAQf82/jfnavpxICTpMaGGHBV9dnxn9dV1dX7248BJ0lNDXiTyby3JXkIo0sDLquqXStp7HVwktTYkK+Dq6pTgFOA/wLel+S6JG+YtL0BJ0mNbdq0aWqvA6GqbqqqdwK/B1wDXDBpW6coJamxIU9RJvl5Ro/MeS5wM3AZ8PuTtreCk6Smpjk9OUlQJtmRZHeSfa6VJXlWkmuTXJNkZ5KTl+lyB6ObLT+9qrZW1Xuravekv98KTpI0LRcD7wYuWeT8lcBnqqrGj8H5KHDMYp1V1YmrGYwBJ0mNzXKKsqquSrJlifPfW3B4X6D29bkkH62q5yW5bq/PZNRNHTfJeAw4SWpsva3BJXk2cCHwYOCZi3zsVeN/T1/Nd7kGJ0mNTXkNbvN47Wz+de5Kx1NVn6yqY4DfBN60yGe+Pf7zvKq6YeELOG/S77KCk6TGplzB7amqE6bR0Xg681FJNlfVnkU+9jTgtXu9d+o+3tsnA06SmlpvdzJJ8nPAf4w3mTwe+GlG2//3/tzLGFVqRyW5dsGpQ4EvT/p9BpwkNTbLgEtyKbCV0VTmjcA24GCAqrqI0fVsL0ryY+CHwPOral8bTT4MXMFore51C97/blXdMul4DDhJamzGuyj/36Nt9jr/FuAtE/RzK3BrkjvH627/J8kHq+qFk4zHgJOkxtbTFOV+OHbhQZJ7AcdP2tiAk6Smkhywe0iuRpLXA38I3DvJbfNvA3cA2yftx4CTpMaGWMFV1YXAhUkurKrX728/BpwkNTbEgEtyTFV9DfjYeLflPUz6EFQDTpIaG2LAAa8GzgXeto9zBTx5kk4MOElqbIgBV1Xnjv89ZTX9GHCS1NR6u9B7pZIcxOh+lVtYkFdV9fZJ2htwktTYkAMO+CzwI+A64O6VNjbgJKmxgQfcEZM+GmdfhneBhCRpo7giya/vb2MrOElqbOAV3FeBTybZBPyYnzzw9LBJGhtwktTYwAPu7cCJwHWL3JR5SQacJDU11Ft1LfBNYNf+hBsYcJLU2sAruG8AX0xyBXD7/JteJiBJGnrAXT9+/dT4tSIGnCQ1NtSAG1/kfWhVvWZ/+zDgJKmpId/JpKruSnLSavow4CSpsaEG3Ng1ST4DfAz4/vybVfWJSRobcJLU2MAD7hDgZu759IACDDhJ2uiGHHBVdfZq2g/6AglJ0tLm1+Gm8ToAY390kiuT7BofH5fkDZO2N+AkqalphtsBqgTfD7ye0W26qKprgRdM2tgpSklqbOB3MrlPVf3TXuF656SNDThJamzIa3DAniRHMdpYQpIzgG9P2tiAk6TGBh5wLwe2A8ck+Raju5qcNWljA06Smhryhd4AVfUN4KlJ7gtsqqrvrqT9oCdnJUl9JXlgkncCX2J00+V3JHngpO2t4CSpsYFvMvkIcBXw3PHxWcBlwFMnaWzASVJjQ56iBB5aVW9acPzmJM+ftPGgo12StLSBXwf3hSQvSLJp/Hoe8PlJG1vBSVJTQ99kApwDnA98cHx8EPD9JC8FqqoOW6qxASdJjQ054Krq0NW0N+AkqbGBbzJZFQNOkppqMEW5KgacJDVmwEmSWhp6wCU5GTi6qj6Q5EHAz1TV9ZO0NeAkqbEhr8El2QacADwG+ABwMPAXwEmTtDfgJKmpBmtwzwZ+GbgaoKr+M8nEOysNOElqbOABd0dVVZL5x+XcdyWNDThJamzgAffRJO8DDk9yDvA7jJ7yPREDTpIaG3LAVdWfJHkacBujdbgLqupvJm1vwElSU0mGvsnk1cBlKwm1hQw4SWpsyBUccCijGy7fwugxOR+rqu9M2ni40S5Jaq2q3lhVxwIvBx4K/H2Sv520vRWcJDU28Apu3m7gJuBm4MGTNrKCk6TGZvk8uCQ7kuxOsmuR82cluTbJdUm+nORxy/R3XpIvAlcCDwTOqarjJv3tVnCS1NQB2GRyMfBu4JJFzl8P/FpV/XeSU4HtwBOX6O9I4PyqumZ/BmPASVJjs5yirKqrkmxZ4vyXFxx+FThiX59LclhV3Qb88fj4AXv1c8sk4zHgJKmxdbwG97vAFYuc+zBwOjAHFLDwRxTwqEm+wICTpMamHHCbk+xccLy9qravtJMkpzAKuJP3db6qTh//+8j9GuWYASdJjU054PZU1Qmr6SDJccCfAadW1c3LfPbKqnrKcu8txoCTpKbW251Mkvws8AnghVX170t87hDgPowqxvvzkynKw4CHT/p9BpwkNTbLNbgklwJbGQXTjcA2Rs9wo6ouAi5gtN3/PeNx3blIRfhS4HzgYYzW4eZ/xG2MdmlOxICTpMZmvIvyzGXOvwR4yQT9vAN4R5JXVNW79nc8BpwkNbaOd1Euq6releQXgMcChyx4f7Hr7O7BgJOkptbbGtxKJdnGaMrzscDlwKnAP7D4heT3MNxfLkla1ixv1bUGzgCeAtxUVWcDjwPuN2ljA06StF79sKruBu5Mchijmy4fOWljpyglqbEhr8EBO5McDryf0W7K7wFfmbSxASdJjQ054KrqvPGfFyX5HHBYVV07aXsDTpK0riR5/FLnqurqSfox4CSpqQO4OWS13rbEuQKePEknBpwkNTbEgKuqU6bRj7soJamxIV8mkOQ+Sd6QZPv4+Ogkp0/a3oCTpMaGHHDAB4A7gF8dH38LePOkjQ04SWps4AF3VFW9FfgxQFX9gHs+/HRJBpwkab26I8m9GW0sIclRwO2TNnaTiSQ1NeBdlPO2AZ8DjkzyIeAk4MWTNjbgJKmxoQZcRgP/GvAc4EmMpiZfVVV7Ju3DgJOkxoYacFVVSS6vql8E/np/+nANTpIaG/gmk6uTPGF/G1vBSVJjQ63gxp4InJXkBuD7jKYpq6qOm6SxASdJTTXYZPL01TQ24CSpsSEHXFXdsJr2rsFJklqygpOkxoZcwa2WASdJjW3kgHOKUpLUkhWcJDW2kSs4A06SmmpwmcCqGHCS1JgBJ0lqyYCTJLVkwEmSWtrIAedlApKklqzgJKkpd1FKktoy4CRJLRlwkqSWDDhJUksGnCSpnY2+ycTLBCRJLVnBSVJjG7mCM+AkqbGNHHBOUUqSWjLgJEktOUUpSY1t5ClKA06SGjPgJEnteB2cJEkNGXCS1Nh8FTeN1wTftSPJ7iS7Fjl/TJKvJLk9yWum/mP3YsBJUmOzDDjgYuAZS5y/BXgl8CdT+GnLWtEa3Nzc3J4kN6zVYDQc63Vef72OC9bv2NbruDaoRxzoAaxGVV2VZMsS53cDu5M8cxbjWVHAVdWD1mogkqTpm/L/wGxOsnPB8faq2j7NL5gmd1FKUmNTDrg9VXXCNDtcSwacJDXlZQKSJDVkBSdJjc2ygktyKbCV0VrdjcA24GCAqrooyUOAncBhwN1JzgceW1W3rcV4DDhJamyWAVdVZy5z/ibgiBkNx4CTpM5cg5MkqRkDTpLUklOUktTYRp6iNOAkqSmvg5MkqSErOElqbCNXcAacJDVmwEmSWtrIAecanCSpJSs4SWpsI1dwBpwkNeVlApIkNWQFJ0mNbeQKzoCTpMY2csA5RSlJaskKTpIas4KTJKkZKzhJasrLBCRJasiAkyS15BSlJDXmFKUkSc1YwUlSY1ZwkiQ1YwUnSY1ZwUmS1IwVnCQ1ZgUnSVIzVnCS1JS36pIkqSEDTpLUklOUktSYU5SSJDVjBSdJjVnBSZLUjAEnSWrJKUpJaswpSkmSmrGCk6TGrOAkSWrGCk6SmvJelJIkNWQFJ0mNWcFJktSMASdJjc2vw03jNcF37UiyO8muRc4nyTuTfD3JtUkeP/UfvIABJ0malouBZyxx/lTg6PHrXOC9azkY1+AkqbFZrsFV1VVJtizxkWcBl1RVAV9NcniSh1bVt9diPFZwkqRZeTjwzQXHN47fWxNWcJLU1Nzc3OeTbJ5il4ck2bngeHtVbZ9i/1NlwElSU1W11HrYgfAt4MgFx0eM31sTTlFKkmblM8CLxrspnwTculbrb2AFJ0makiSXAluBzUluBLYBBwNU1UXA5cBpwNeBHwBnr+l4RptZJEnqxSlKSVJLBpwkqSUDTpLUkgEnSWrJgJMktWTASZJaMuAkSS0ZcJKklv4XOUChR/Z2nEgAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# initalize the design region randomly\n",
    "simulation.init_design_region(design_region, eps_m, style='halfway')\n",
    "simulation.plt_eps(tiled_y=num_cells, outline=False)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# define objective function  (equal power transmission to bottom and top)\n",
    "from angler.objective import Objective, obj_arg\n",
    "arg1 = obj_arg('ex', component='Ex', nl=False)\n",
    "arg2 = obj_arg('ey', component='Ey', nl=False)\n",
    "\n",
    "import autograd.numpy as npa\n",
    "def J(ex, ey):\n",
    "    eta = npa.zeros((Nx, Ny), dtype=npa.complex128)    \n",
    "    centers = [i * (gap + L) for i in range(num_channels//2+1)]\n",
    "    for center in centers:\n",
    "        eta[nx - int(center/dl), :] = 1/Ny*npa.exp(1j*2*npa.pi*dl*npa.linspace(0, Ny-1, Ny)/beta/lambda0)\n",
    "        eta[nx + int(center/dl), :] = 1/Ny*npa.exp(1j*2*npa.pi*dl*npa.linspace(0, Ny-1, Ny)/beta/lambda0)    \n",
    "    return npa.sum(npa.real(ey*eta)) / npa.sqrt(npa.square(npa.max(npa.abs(ex))) + npa.square(npa.max(npa.abs(ey)))) / num_channels\n",
    "\n",
    "objective = Objective(J, arg_list=[arg1, arg2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# make optimization object and check derivatives\n",
    "R = None\n",
    "beta_proj = 1e-9\n",
    "eta= 0.5\n",
    "optimization = Optimization(objective=objective, simulation=simulation, design_region=design_region, eps_m=eps_m, R=R, beta=beta_proj, eta=eta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "adjoint gradient   = [-4.0868703620643335e-07, -2.0673779062515623e-07, 4.432445464249246e-08, 7.970518724408801e-06, -2.0703678301183502e-07]\n",
      "numerical gradient = [-3.683904373502311e-07, -2.0596320208891418e-07, 4.268005340174431e-08, 7.433878804457687e-06, -1.662005747069026e-07]\n"
     ]
    }
   ],
   "source": [
    "# check the derivatives (note, full derivatives are checked, linear and nonlinear no longer separate)\n",
    "(grad_avm, grad_num) = optimization.check_deriv(Npts=5, d_rho=1e-4)\n",
    "print('adjoint gradient   = {}\\nnumerical gradient = {}'.format(grad_avm, grad_num))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " ObjectiveFn: 0.0215 Iteration:  1/2 ETA:   0:00:36                            "
     ]
    }
   ],
   "source": [
    "# run the optimization\n",
    "optimization.run(method='LBFGS', Nsteps=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1584x216 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot optimization results\n",
    "f, (ax1, ax2) = plt.subplots(1, 2, figsize=(22,3))\n",
    "\n",
    "simulation.plt_eps(ax=ax1, tiled_y=num_cells, outline=False)\n",
    "ax1.set_title('final permittivity distribution')\n",
    "\n",
    "optimization.plt_objs(ax=ax2)\n",
    "ax2.set_yscale('linear')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# setup subplots\n",
    "f, (ax) = plt.subplots(1,1, figsize=(20,5))\n",
    "\n",
    "# linear fields\n",
    "(Hx,Hy,Ez) = simulation.solve_fields()\n",
    "simulation.plt_re(ax=ax, tiled_y=num_cells)\n",
    "ax1.set_title('linear field')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "for more info see\n",
    "\n",
    "**Hughes, Tyler, et al. \"Method for computationally efficient design of dielectric laser accelerator structures.\" Optics Express 25.13 (2017): 15414-15427**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
